//package com.example.admin.controller.ai;
//
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.http.*;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.client.HttpClientErrorException;
//import org.springframework.web.client.RestTemplate;
//
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * 豆包火山API聊天控制器
// * 用于处理与豆包火山API的聊天请求
// */
//@RestController
//@RequestMapping("/chat")
//public class ChatGptController {
//
//    // 日志记录器
//    private static final Logger logger = LoggerFactory.getLogger(ChatGptController.class);
//
//    // 从配置文件中读取豆包火山API的密钥
//    @Value("${doubao.api-key}")
//    private String apiKey;
//
//    // 从配置文件中读取豆包火山API的模型ID
//    @Value("${doubao.model-id}")
//    private String model;
//
//    // 从配置文件中读取豆包火山API的基础URL
//    @Value("${doubao.base-url}")
//    private String baseUrl;
//
//    /**
//     * 处理聊天请求
//     * @param payload 请求体，包含用户消息
//     * @return 返回AI的回复
//     */
//    @PostMapping // 处理 HTTP POST 请求
//    public ResponseEntity<Map<String, String>> chat(@RequestBody Map<String, Object> payload) {
//        // API 端点地址，豆包火山API的请求地址
//        String apiUrl = baseUrl;
//
//        // 创建 HTTP 请求头
//        HttpHeaders headers = new HttpHeaders();
//        headers.setContentType(MediaType.APPLICATION_JSON); // 设置请求格式为 JSON
//        headers.set("Authorization", "Bearer " + apiKey); // 添加 API 认证的 Bearer Token
//
//        ObjectMapper objectMapper = new ObjectMapper();
//        try {
//            // 构造请求体的 Map 结构
//            Map<String, Object> requestBodyMap = new HashMap<>();
//            requestBodyMap.put("model", "doubao-1.5-thinking-pro-250415"); // 设置模型ID
//
//            // 获取前端传来的多轮消息
//            @SuppressWarnings("unchecked")
//            List<Map<String, String>> messages = (List<Map<String, String>>) payload.get("messages");
//            if (messages == null || messages.isEmpty()) {
//                // 兼容老版本：如果没有messages参数，尝试兼容userMessage参数
//                String userMessage = (String) payload.get("userMessage");
//                messages = new ArrayList<>(Arrays.asList(
//                        createMessage("system", "您是个乐于助人的助手."), // 系统消息
//                        createMessage("user", userMessage) // 用户消息
//                ));
//            }
//            requestBodyMap.put("messages", messages); // 将消息列表添加到请求体
//
//            // 将请求体 Map 转换为 JSON 字符串
//            String requestBody = objectMapper.writeValueAsString(requestBodyMap);
//            logger.info("Request Body: {}", requestBody); // 记录请求体
//
//            // 创建HTTP请求实体
//            HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);
//            RestTemplate restTemplate = new RestTemplate();
//            // 发送POST请求到豆包火山API
//            ResponseEntity<String> responseEntity = restTemplate.exchange(apiUrl, HttpMethod.POST, requestEntity, String.class);
//            logger.info("API Response: {}", responseEntity.getBody()); // 记录API响应
//
//            // 解析API响应
//            Map<String, Object> responseMap = objectMapper.readValue(responseEntity.getBody(), new TypeReference<Map<String, Object>>() {});
//            List<Map<String, Object>> choices = Optional.ofNullable(responseMap.get("choices"))
//                    .filter(List.class::isInstance)
//                    .map(List.class::cast)
//                    .orElse(Collections.emptyList());
//
//            // 提取AI回复并返回
//            return choices.stream()
//                    .findFirst()
//                    .flatMap(choice -> Optional.ofNullable(choice.get("message"))
//                            .filter(Map.class::isInstance)
//                            .map(Map.class::cast)
//                            .map(message -> message.get("content")))
//                    .map(aiResponse -> {
//                        Map<String, String> response = new HashMap<>();
//                        response.put("reply", (String) aiResponse);
//                        return ResponseEntity.ok(response);
//                    })
//                    .orElseGet(() -> {
//                        Map<String, String> errorResponse = new HashMap<>();
//                        errorResponse.put("reply", "AI 响应不可用");
//                        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
//                    });
//        } catch (HttpClientErrorException e) {
//            // 处理HTTP错误
//            logger.error("HTTP Error: {}, Response Body: {}", e.getMessage(), e.getResponseBodyAsString());
//            Map<String, String> errorResponse = new HashMap<>();
//            errorResponse.put("reply", "AI 响应不可用");
//            return ResponseEntity.status(e.getStatusCode()).body(errorResponse);
//        } catch (Exception e) {
//            // 处理其他异常
//            logger.error("An error occurred", e);
//            Map<String, String> errorResponse = new HashMap<>();
//            errorResponse.put("reply", "AI 响应不可用");
//            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
//        }
//    }
//
//    /**
//     * 创建消息对象
//     * @param role 消息角色（system/user/assistant）
//     * @param content 消息内容
//     * @return 消息对象
//     */
//    private Map<String, String> createMessage(String role, String content) {
//        Map<String, String> message = new HashMap<>();
//        message.put("role", role);
//        message.put("content", content);
//        return message;
//    }
//}
